#include <iostream>
#include <vector>

void func(const int &a)
{
    std::cout<<a<<std::endl;
}

class Test
{
public:
    Test()
    {
        a = new int;
    }
    ~Test()
    {
        if(a)
            delete a;
    }
    Test(const Test& t)
    {
        std::cout<<"深度拷贝\n";
        this->a = new int(*t.a);
    }

    //移动语义:夺取资源
    Test(Test &&t) //移动构造函数: 通过夺取其他对象的资源构建自身
    {
        std::cout<<"移动构造\n";
        a = t.a;
        t.a = nullptr;
    }
private:
    int *a;
};

int main()
{
    // int &&a = 10;// 右值引用:可以引用右值

    // Test t;
    // //把左值变成右值  move
    // Test t1 = std::move(t);

    std::vector<int> v = {1,2,3};
    std::vector<std::vector<int>> v2;
    v2.push_back(std::move(v));// 减少容器对象的拷贝

    return 0;
}